package com.it.schoolhomeos.repository;

import com.it.schoolhomeos.entity.Exam;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.util.List;

/**
 * 考试数据访问接口
 * 
 * 提供对Exam实体的数据库操作方法
 * 继承JpaRepository以获取基本的CRUD操作
 */
@Repository
public interface ExamRepository extends JpaRepository<Exam, Long> {
    
    /**
     * 根据考试名称查找考试
     * 
     * @param name 考试名称
     * @return 考试列表
     */
    List<Exam> findByName(String name);
    
    /**
     * 根据考试日期查找考试
     * 
     * @param examDate 考试日期
     * @return 考试列表
     */
    List<Exam> findByExamDate(LocalDate examDate);
    
    /**
     * 根据考试日期范围查找考试
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 考试列表
     */
    List<Exam> findByExamDateBetween(LocalDate startDate, LocalDate endDate);
    
    /**
     * 根据考试名称模糊查询
     * 
     * @param name 考试名称关键字
     * @param pageable 分页参数
     * @return 分页的考试列表
     */
    Page<Exam> findByNameContaining(String name, Pageable pageable);
    
    /**
     * 查询包含指定科目的考试
     * 
     * @param subject 科目
     * @return 考试列表
     */
    @Query("SELECT e FROM Exam e WHERE e.subjects LIKE %:subject% OR e.subjects LIKE %:subject OR e.subjects LIKE :subject% OR e.subjects = :subject")
    List<Exam> findBySubjectContaining(@Param("subject") String subject);
} 